import pygame
# from pyscreeze import center 暂时注释掉

from settings import *

class UI:
    def __init__(self):
        self.游戏窗口 = pygame.display.get_surface()
        # 从settings中获取字体和字体大小
        self.字体 = pygame.font.Font(字体, 字体大小)

        # pygame.Rect(left,top,width,height)
        self.血条区域 = pygame.Rect(10, 10, 血条宽, 血条和蓝条的高)
        self.蓝条区域 = pygame.Rect(10, 34, 蓝条宽, 血条和蓝条的高)

        self.武器字典 = []
        for 武器 in 武器库.values():
            路径 = 武器['武器图']
            武器视图 = pygame.image.load(路径)
            self.武器字典.append(武器视图)

        self.法术字典 = []
        for 法术 in 法术库.values():
            路径 = 法术['法术图']
            法术视图 = pygame.image.load(路径)
            self.法术字典.append(法术视图)

    def 展示血条和蓝条(self, 剩余, 最大值, 区域, 颜色):
        # 绘制背景
        pygame.draw.rect(self.游戏窗口, 背景颜色, 区域)

        # 转换为像素
        比例 = 剩余 / 最大值
        剩余宽 = 区域.width * 比例
        剩余区域 = 区域.copy()
        剩余区域.width = 剩余宽

        # 绘制血条和蓝条
        pygame.draw.rect(self.游戏窗口, 颜色, 剩余区域)
        pygame.draw.rect(self.游戏窗口, 边框颜色, 区域, 3)

    def 武器背景框(self, 起始横坐标, 起始纵坐标, 切换武器):
        背景框 = pygame.Rect(起始横坐标, 起始纵坐标, 武器背景框边长, 武器背景框边长)
        pygame.draw.rect(self.游戏窗口, 背景颜色, 背景框)
        if 切换武器:
            pygame.draw.rect(self.游戏窗口, 切换武器时边框的颜色, 背景框, 3)
        else:
            pygame.draw.rect(self.游戏窗口, 边框颜色, 背景框, 3)
        return 背景框

    def 展示武器(self, 武器索引, 切换武器):
        背景框 = self.武器背景框(10, 630, 切换武器)
        武器视图 = self.武器字典[武器索引]
        武器区域 = 武器视图.get_rect(center=背景框.center)

        self.游戏窗口.blit(武器视图, 武器区域)

    def 展示法术(self,法术索引,切换武器):
        背景框 = self.武器背景框(80, 635, 切换武器)
        法术视图 = self.法术字典[法术索引]
        法术区域 = 法术视图.get_rect(center=背景框.center)

        self.游戏窗口.blit(法术视图, 法术区域)

    def 展示经验(self,exp):
        经验视图 = self.字体.render(str(int(exp)),False,字体颜色)
        x = self.游戏窗口.get_size()[0] - 20
        y = self.游戏窗口.get_size()[1] - 20
        经验区域  = 经验视图.get_rect(bottomright=(x,y))

        pygame.draw.rect(self.游戏窗口,背景颜色,经验区域.inflate(20,20))
        pygame.draw.rect(self.游戏窗口,边框颜色,经验区域.inflate(20,20),3)
        self.游戏窗口.blit(经验视图,经验区域)

    def 展示(self, player):
        self.展示血条和蓝条(player.血, player.数据['健康值'], self.血条区域, 血条颜色)
        self.展示血条和蓝条(player.蓝, player.数据['能量值'], self.蓝条区域, 蓝条颜色)

        self.展示经验(player.经验)

        self.展示武器(player.武器索引, not player.是否可以切换武器)
        self.展示法术(player.法术索引, not player.是否可以切换法术)
